package com.xebest.web.mapper.read;

import com.xebest.web.form.XeVenAfterSaleOrderQueryForm;
import com.xebest.web.form.XeVenOrderForm;
import com.xebest.web.model.XeVenOrderInfoDetailEntity;
import com.xebest.web.model.XeVenOrderInfoEntity;
import com.xebest.web.model.XeVenOrderStoreEntity;
import com.xebest.web.view.XeVenAfterSaleOrderView;
import com.xebest.web.view.XeVenOrderDetailView;
import com.xebest.web.view.XeVenOrderView;
import com.xebest.web.view.XeVenSummaryPurchView;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author ruancz
 * @since 2017年6月13日 下午3:37:32
 */
@Repository
public interface XeVenOrderReadMapper {

    /**
     * 查询订单列表
     *
     * @author ruancz
     * @since 2017年6月14日 下午6:56:35
     */
    List<XeVenOrderView> queryOrderList(Map<String, Object> paramMap);

    /**
     * 查询订单对应仓库
     *
     * @author ruancz
     * @since 2017年6月15日 下午8:36:31
     */
    XeVenOrderStoreEntity getOrderStoreByOrderId(Map<String, Object> map);

    /**
     * 条件查询订单明细信息
     *
     * @param params void
     * @author ruancz
     * @since 2017年6月27日 上午11:47:37
     */
    List<XeVenOrderInfoDetailEntity> getOrderDetailByParam(Map<String, Object> params);

    /**
     * 条件查询订单信息
     *
     * @author ruancz
     * @since 2017年6月27日 下午7:52:17
     */
    List<XeVenOrderInfoEntity> queryOrderInfoByParams(Map<String, Object> params);

    /**
     * 查询订单以及订单 明细
     *
     * @author ruancz
     * @since 2017年6月28日 下午2:46:43
     */
    XeVenOrderInfoEntity getOrderInfo(Map<String, Object> params);

    /**
     * 添加查询订单明细
     *
     * @author ruancz
     * @since 2017年6月30日 上午11:04:32
     */
    List<XeVenOrderDetailView> queryOrderInfoDetailByParam(Map<String, Object> map);

    /**
     * 查询订单采购关联表
     */
    List<Map<String, Object>> queryOrderListByParams(Map<String, Object> params);

    /**
     * 查询订单列表（售后单创建时调用）
     *
     * @author chenjing
     * @since 17:38 2017/8/3
     */
    List<XeVenAfterSaleOrderView> queryOrderListForAfterSale(XeVenAfterSaleOrderQueryForm form);

    /**
     * 查询汇总商品
     *
     * @author ruancz
     * @since 2017年8月5日 下午16:34:19
     */
    List<XeVenSummaryPurchView> countSummaryPurch(Map<String, Object> resultMap);

    /**
     * 根据采购单号和sku查询实发量
     */
    List<Map<String, Object>> sumPurchase(Map<String, Object> resultMap);

    /**
     * 待付款订单支付状态同步接口使用
     *
     * @return XeVenOrderInfoEntity
     * @author 李贝贝
     * @since 2017年8月16日 上午11:41:16
     */
    XeVenOrderInfoEntity getWaitPayOrder(Map<String, Object> resultMap);

    /**
     * 查询各种订单备注
     *
     * @return XeVenOrderInfoEntity
     * @author 李书峰
     * @since 2017年8月17日 下午5:35:48
     */
    XeVenOrderInfoEntity queryRemarks(Map<String, Object> resultMap);

    List<Map<String, Object>> querySalesMan();

    Map<String, Object> queryRefundAmount(XeVenOrderForm orderForm);


    /**
     * @author 李书峰
     * @since 2017年9月14日 下午4:02:41
     */
    Map<String, Object> queryShopYesterdayData(Map<String, Object> map);

    /**
     * @author 李书峰
     * @since 2017年9月14日 下午4:02:44
     */
    BigDecimal queryWaitCheckOrderNum(Map<String, Object> map);

    /**
     * @author 李书峰
     * @since 2017年9月14日 下午4:03:03
     */
    BigDecimal queryExceptionOrderNum(Map<String, Object> map);

    /**
     * @author 李书峰
     * @since 2017年9月14日 下午4:03:07
     */
    BigDecimal queryWaitSendOrderNum(Map<String, Object> map);

    /**
     * 微信生意管家 首页待发货统计
     *
     * @author zhouyongshen
     * @since v3.1.5
     */
    BigDecimal queryWaitSendOrderNumForWeChat(Map<String, Object> map);

    /**
     * @author 李书峰
     * @since 2017年9月14日 下午4:03:18
     */
    BigDecimal queryMonthTotalAmount(Map<String, Object> map);

    /**
     * @author 李书峰
     * @since 2017年9月14日 下午4:03:21
     */
    BigDecimal queryMonthTradeUserNum(Map<String, Object> map);

    /**
     * 查询订单标记
     */
    XeVenOrderInfoEntity getXeVenOrderInfo(Map<String, Object> params);

    /**
     * 统计订单列表数据
     */
    List<Map<String, Object>> queryCountOrderInfo(Map<String, Object> paramMap);

    XeVenOrderView queryOrderPhoneByOrderId(String orderId);

    /**
     * 根据一定条件统计订单数
     *
     * @param paramMap paramType =1 日
     *                 paramType=2 月
     *                 paramType=3 年
     *                 paramValue 参数值
     * @author chenjing
     * @since 15:41 2017/11/24
     */
    BigDecimal queryOrderCountByParams(Map<String, Object> paramMap);

    /**
     * 根据一定条件统计销售额
     *
     * @param paramMap paramType =1 日
     *                 paramType=2 月
     *                 paramType=3 年
     *                 paramValue 参数值
     * @author chenjing
     * @since 15:41 2017/11/24
     */
    BigDecimal queryMonthTotalAmountByParams(Map<String, Object> paramMap);


    /**
     * 根据一定条件统计交易用户数
     *
     * @param paramMap paramType =1 日
     *                 paramType=2 月
     *                 paramType=3 年
     *                 paramValue 参数值
     * @author chenjing
     * @since 15:41 2017/11/24
     */
    BigDecimal queryMonthTradeUserNumByParams(Map<String, Object> paramMap);


    /**
     * 根据一定条件统计对应订单中最多的5个分类
     *
     * @param paramMap paramType =1 日
     *                 paramType=2 月
     *                 paramType=3 年
     *                 paramValue 参数值
     * @author chenjing
     * @since 15:41 2017/11/24
     */
    List<Map<String, Object>> queryProOrgCountByParams(Map<String, Object> paramMap);

    /**
     * 统计每月的日销售额和订单数
     *
     * @author chenjing
     * @since 11:29 2017/11/27
     */
    List<Map<String, Object>> queryOrderCountAmountByParams(Map<String, Object> paramMap);

    List<XeVenOrderInfoEntity> queryOrderStatusByOrderId(String orderId);

    Map<String, Object> queryCountPringByDay(Map<String, Object> resultMap);

    /**
     * 某个产品（spu）在订单记录中被多少条订单占用
     * 订单状态包括 待分配、待审核、待发货 均表示为spu被占用
     *
     * @param spu 产品spu
     * @return 多少个订单中包含此订单
     * @author zhouys
     */
    int spuTakeUpCount(@Param("spu") String spu);
}
